package br.edu.utfpr.view.action;

import br.edu.utfpr.app.beans.Cliente;
import br.edu.utfpr.app.beans.Pedido;
import br.edu.utfpr.app.beans.Produto;
import br.edu.utfpr.app.beans.Vendedor;
import br.edu.utfpr.app.dto.ClienteDTO;
import br.edu.utfpr.app.dto.PedidoDTO;
import br.edu.utfpr.app.dto.ProdutoDTO;
import br.edu.utfpr.app.dto.VendedorDTO;
import br.edu.utfpr.util.Entidade;
import br.edu.utfpr.util.Operacao;
import br.edu.utfpr.view.ServidorView;

public class ControladorAcao {
	String message;
	Object objeto;
	Object retorno;

	public ControladorAcao(String message, Object objeto) {
		this.message = message;
		this.objeto = objeto;
	}

	public Object execute(){ 
		int entidade = Integer.parseInt(String.valueOf(message.charAt(0)));

		switch (entidade) {
		case Entidade.CLIENTE:
			return doCliente();
			
		case Entidade.VENDEDOR:
			return doVendedor();
			
		case Entidade.PRODUTO:
			return doProduto();
			
		case Entidade.PEDIDO:
			return doPedido();

		}
		return null;
	}

	public Object doCliente() {
		int operacao = Integer.parseInt(String.valueOf(message.charAt(1)));

		Action<Cliente> action = new ActionCliente();
		
		switch (operacao) {
		case Operacao.SALVAR:
			Cliente c1 = new Cliente((ClienteDTO) objeto);
			action.salvar(c1);
			ServidorView.addLog("Salvar Cliente: " + c1.getNome());
			return c1.parseDTO();
			
		case Operacao.EXCLUIR:
			Cliente c2 = new Cliente((ClienteDTO) objeto);
			action.excluir(c2);
			ServidorView.addLog("Excluir Cliente: " + c2.getNome());
			return c2.parseDTO();
			
		case Operacao.LISTAR:
			ServidorView.addLog("Enviando Clientes");
			return action.listar();

		default:
			return null;
		}
	}

	public Object doVendedor() {
		int operacao = Integer.parseInt(String.valueOf(message.charAt(1)));

		Action<Vendedor> action = new ActionVendedor();
		
		
		switch (operacao) {
		case Operacao.SALVAR:
			Vendedor v1 = new Vendedor((VendedorDTO) objeto);
			action.salvar(v1);
			ServidorView.addLog(("Salvar Vendedor: " + v1.getNome()));
			return v1.parseDTO();
			
		case Operacao.EXCLUIR:
			Vendedor v2 = new Vendedor((VendedorDTO) objeto);
			action.excluir(v2);
			ServidorView.addLog("Excluir Vendedor: " + v2.getNome());
			return v2.parseDTO();
			
		case Operacao.LISTAR:
			ServidorView.addLog("Enviando Vendedores");
			return action.listar();
			
		default:
			return null;
		}
	}

	public Object doProduto() {
		int operacao = Integer.parseInt(String.valueOf(message.charAt(1)));

		Action<Produto> action = new ActionProduto();
		
		switch (operacao) {
		case Operacao.SALVAR:
			Produto p1 = new Produto((ProdutoDTO) objeto);
			action.salvar(p1);
			ServidorView.addLog(("Salvar Produto: " + p1.getDescricao()));
			return p1.parseDTO();
			
		case Operacao.EXCLUIR:
			Produto p2 = new Produto((ProdutoDTO) objeto);
			action.excluir(p2);
			ServidorView.addLog("Excluir Produto: " + p2.getDescricao());
			return p2.parseDTO();
			
		case Operacao.LISTAR:
			ServidorView.addLog("Enviando Produtos");
			return action.listar();

		default:
			return null;
		}
	}

	public Object doPedido() {
		int operacao = Integer.parseInt(String.valueOf(message.charAt(1)));

		Action<Pedido> action = new ActionPedido();

		switch (operacao) {
		case Operacao.SALVAR:
			Pedido p1 = new Pedido((PedidoDTO) objeto);
			action.salvar(p1);
			ServidorView.addLog(("Salvar Pedido: " + p1.getDescricao()));
			return p1.parseDTO();
			
		case Operacao.EXCLUIR:
			Pedido p2 = new Pedido((PedidoDTO) objeto);
			action.excluir(p2);
			ServidorView.addLog("Excluir Pedido: " + p2.getDescricao());
			return p2.parseDTO();
			
		case Operacao.LISTAR:
			ServidorView.addLog("Enviando Pedidos");
			return action.listar();

		default:
			return null;
		}
	}

}
